import java.util.Scanner;

public class Test {
    //作业练习题
    //4.递归求解汉诺塔问题
        static int m=0;//定义一个数用来记载次数，方便我们输出移动第几次
        public static void main4(String[] args) {
            int num;//盘子数
            char a,b,c;//三个圆柱名
            a='A';b='B';c='C';
            Scanner scanner=new Scanner(System.in);
            System.out.println("请输入盘子个数：");
            num=scanner.nextInt();
            hanoi(num,a,b,c);//调用Hanoi函数
            System.out.println("共移动了"+m+"次");//m是count方法返回的值

        }

        public static void hanoi(int num,char m,char n,char q) {
            //定义m,n,q用来表示三个柱子：
            //m表示第一根柱子：起始柱；n表示第二根柱子：中转柱；q表示第三根柱子：目标柱
            if(num==1)//当只有一个盘子的时候
                count(num,m,q);//这个函数用来输出次数以及过程
            else {//不止一个盘子的时候
                //此时目标柱先作中转柱，中转柱作目标柱
                //先将num-1的盘子放在中转柱上，然后将第num个盘子放在目标住上
                hanoi(num-1, m, q, n);
                count(num,m,q);
                //此时目标柱上就一个第num个盘子，中转柱上有num-1个盘子，起始柱上空，所以将起始柱
                //变为中转，原来的中转柱就变为起始：
                //将新起始柱上的num-1-1个盘子放在新中转柱上，然后将第num-1个盘子放在目标住上
                hanoi(num-1, n, m, q);
            }
        }
        public static int count(int n,char x,char y) {
            m++;//累计次数
            System.out.println("第"+m+"次移动的过程为："+x+"-->"+y);
            return m;
        }


    //作业练习题
    //3.求最大值方法的重载 在同一个类中定义多个方法：要求不仅可以求2个整数的最大值，还可以求3个小数的最大值
    public static int max(int a,int b){
        int tmp;
        if(a<b) {
            tmp=a;
            a=b;
            b=tmp;
        }
        return a;
    }
    public static double max(double a,double b,double c){
        double tmp;
        if(a<b){
            tmp=a;
            a=b;
            b=tmp;
            if(b<c){
                tmp=b;
                b=c;
                c=tmp;
            }
        }else{
            if(a<c){
            tmp=a;
            a=c;
            c=tmp;
            }
        }
        return a;
    }

    public static void main3(String[] args) {
        int result1=max(5,6);
        System.out.println(result1);
        double result2=max(5.6,8.9,6.7);
        System.out.println(result2);
    }

    //作业练习题
    //2.求和方法的重载 写两个方法 求两个整数的和 和 求三个小数的和
    public static int sum(int a,int b){ //求和方法的重载 求两个整数的和
        return a+b;
    }
    public static double sum(double a,double b,double c){ //求和方法的重载 求三个小数的和
        return a+b+c;
    }

    public static void main2(String[] args) {
        System.out.println(sum(1,2));
        System.out.println(sum(5.6,7.9,5.8));//小数默认为double类型
    }
    public static int max2(int a,int b){ //比2个整数的大小
        int tmp=0;
        if(a<b){
           tmp=a;
           a=b;
           b=tmp;
        }
        return a;
    }
    public static int max3(int a,int b,int c){ //比3个整数的大小
        a=max2(a,b);
        b=max2(b,c);
        return max2(a,b);
    }
    public static void main1(String[] args) {
        //作业练习题
        //1.创建方法求两个数的最大值max2，随后再写一个求3个数的最大值的函数max3。
        //要求：在max3这个函数中，调用max2函数，来实现3个数的最大值计算
        int result1=max2(2,3);
        System.out.println(result1);
        int result2=max3(9,23,7);
        System.out.println(result2);
    }
}
